#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QSettings>
#include <QDebug>
#include <QTextCodec>
#include <QFile>
#include <QComboBox>
#include "device.h"
#include <QTableWidgetItem>
#include "dockwidget2.h"
#include "DebugFunction.h"
#include <QPushButton>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void GetAvailablePorts();                               //获取可用的端口号
    void ReadPortDefaultValue();                            //读取串口的默认配置
    void SlotsInit();                                       //初始化信号与槽
    void SetStyleSheet();                                   //设置样式表
    void SetRadioButtonUseable(bool);                       //设置radiobutton是否可用

    Device device1;
    Device device2;
    Device device3;
    Device device4;
    Device *device;

    //DockWidget *dockWidgetGroup[128]={nullptr};
    /*-----------------------------调试功能相关函数------------------------------*/
    ButtonGroup buttonGroup;
    void ReadDebugConfig();                                                                      //读取调试界面的配置文件，读取结果存与buttonGroup中;
    void GetDebugConfigContent(int rowsIndex,QStringList);                                       //读取调试界面配置文件的一行，存于buttonGroup中
    Device* GetDevice(int com);                                                                  //获取设备序号号对应的设备，方便在只知道设备序号的情况下能获取设备发送出数据
    void HandleButton(int i,int16_t);                                                            //处理第i个按钮操作，从0开始
    void HandleSyncButton(int i);                                                                //处理第i个按钮的同步按钮，i从0开始。
    QPushButton *GetPushButtonByRowIndex(int RowsIndex);                                         //根据行号获得按钮号

    //在设置串口信息时关闭串口，设置完之后再打开串口
    bool timerIsStart=false;
    void StopRead();
    void StartRead();
    /*------------------------------创建菜单栏------------------------------------*/
    void CreateMenueBars();
    QMenu *menue;
    QAction *action2;
    QAction*action3;
private:
    Ui::MainWindow *ui;
public slots:
    void StartCommunication();
    void StopCommunication();
    void SaveDefaultPorts(bool);
    void LoadSavePorts();
    void TabWidgetChanged(int);
    void RadioButtonChanged();
    void NewFc3DockWidget();
    void NewFc4DockWidget();

    //调试界面的按钮
    void OpenPort();
    void OpenPort2();
    void OpenPort3();
    void OpenPort4();
    void ShowRecvData(QByteArray);
    void Send1();
    void Send2();
    void Send3();
    void Send4();
    void Send5();
    void Send6();
    void Send7();
    void Send8();
    void Send9();
    void Send10();
    void Send11();
    void Send12();
    void Send13();
    void Send14();
    void Send15();
    void Send16();
    void Send17();
    void Send18();
    void Send19();
    void Send20();
    void Send21();
    void Send22();
    void Send23();
    void Send24();
    void Send25();
    void Send26();
    void Send27();
    void Send28();
    void Send29();
    void Send30();
    void Send31();
    void Send32();
};
#endif // MAINWINDOW_H
